/***********************************************************************************
** MIT License                                                                    **
**                                                                                **
** Copyright (c) 2018 Victor DENIS (victordenis01@gmail.com)                      **
**                                                                                **
** Permission is hereby granted, free of charge, to any person obtaining a copy   **
** of this software and associated documentation files (the "Software"), to deal  **
** in the Software without restriction, including without limitation the rights   **
** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell      **
** copies of the Software, and to permit persons to whom the Software is          **
** furnished to do so, subject to the following conditions:                       **
**                                                                                **
** The above copyright notice and this permission notice shall be included in all **
** copies or substantial portions of the Software.                                **
**                                                                                **
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR     **
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,       **
** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE    **
** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER         **
** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,  **
** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE  **
** SOFTWARE.                                                                      **
***********************************************************************************/

#pragma once
#ifndef SIELO_BROWSER_ADBTREEWIDGET_HPP
#define SIELO_BROWSER_ADBTREEWIDGET_HPP

#include "SharedDefines.hpp"

#include <QTreeWidget>

#include <QPoint>
#include <QKeyEvent>

namespace Sn {
namespace ADB {
class Rule;
class Subscription;

class SIELO_SHAREDLIB TreeWidget: public QTreeWidget {
Q_OBJECT

public:
	TreeWidget(Subscription* subscription, QWidget* parent = nullptr);

	Subscription* subscription() const { return m_subscription; }

	void showRule(const Rule* rule);
	void refresh();

public slots:
	void addRule();
	void removeRule();

private slots:
	void contextMenuRequested(const QPoint& pos);
	void itemChanged(QTreeWidgetItem* item);
	void copyFilter();

	void subscriptionUpdated();
	void subscriptionError(const QString& message);

private:
	void adjustItemFeature(QTreeWidgetItem* item, const Rule* rule);
	void keyPressEvent(QKeyEvent* event);

	Subscription* m_subscription{nullptr};
	QTreeWidgetItem* m_topItem{nullptr};

	QString m_ruleToBeSelected{};
	bool m_itemChangingBlock{false};
	bool m_refreshAllItemsNeeded{true};
};
}
}

#endif //SIELO_BROWSER_ADBTREEWIDGET_HPP
